// 1.5. 运算符-赋值运算符
/**
 * 算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++ 内置了丰富的运算符，并提供了以下类型的运算符：
* 
* 算术运算符
* 关系运算符
* 逻辑运算符
* 位运算符
* 赋值运算符
* 杂项运算符
* 本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他运算符。
 *
 * 
 * 赋值运算符
 * 
 * 运算符 =
 * 描述 简单的赋值运算符，把右边操作数的值赋给左边操作数
 * 实例 	C = A + B 将把 A + B 的值赋给 C
 * 
 * 运算符 +=
 * 描述 加且赋值运算符，把右边操作数加上左边操作数的结果赋值给左边操作数
 * 实例 C += A 相当于 C = C + A
 * 
 * 运算符 -=
 * 描述 减且赋值运算符，把左边操作数减去右边操作数的结果赋值给左边操作数
 * 实例 	C -= A 相当于 C = C - A
 * 
 * 运算符 *=
 * 描述 乘且赋值运算符，把右边操作数乘以左边操作数的结果赋值给左边操作数
 * 实例 	C *= A 相当于 C = C * A
 * 
 * 运算符 /=
 * 描述 除且赋值运算符，把左边操作数除以右边操作数的结果赋值给左边操作数
 * 实例 	C /= A 相当于 C = C / A
 * 
 * 运算符 %=
 * 描述 求模且赋值运算符，求两个操作数的模赋值给左边操作数
 * 实例 C %= A 相当于 C = C % A
 * 
 * 运算符 &=
 * 描述 	按位与且赋值运算符
 * 实例 	C &= 2 等同于 C = C & 2
 * 
 * 运算符 |=
 * 描述 	按位或且赋值运算符
 * 实例 	C |= 2 等同于 C = C | 2
 * 
 * 运算符 ^=
 * 描述 按位异或且赋值运算符
 * 实例 C ^= 2 等同于 C = C ^ 2
 * 
 * 运算符 <<=
 * 描述 	左移且赋值运算符
 * 实例 C <<= 2 等同于 C = C << 2
 * 
 * 运算符 >>=
 * 描述 右移且赋值运算符
 * 实例 	C >>= 2 等同于 C = C >> 2
 * 
 * 
*/

#include <iostream>

int main(void)
{
  int a = 21;
  int c;

  c = a;
  std::cout << "=运算，c的值\t" << c << std::endl;

  c += a;
  std::cout << "+=运算，c的值\t" << c << std::endl;

  c -= a;
  std::cout << "-=运算，c的值\t" << c << std::endl;

  c *= a;
  std::cout << "*=运算，c的值\t" << c << std::endl;

  c /= a;
  std::cout << "/=运算，c的值\t" << c << std::endl;

  c = 200;
  c %= a; // 11
  std::cout << "200 %= 21运算，c的值\t" << c << std::endl;

  c <<= 2; // 44
  std::cout << "11 <<= 2运算，c的值\t" << c << std::endl;

  c >>= 2; // 11
  std::cout << "44 >>= 2运算，c的值\t" << c << std::endl;

  c &= 2; // 2
  std::cout << "11 &= 2运算，c的值\t" << c << std::endl;

  c ^= 2; // 0
  std::cout << "2 ^= 2运算，c的值\t" << c << std::endl;

  c |= 2; // 2
  std::cout << "0 |= 2运算，c的值\t" << c << std::endl;

  // c ~= 2; //  无~=

  printf("----------end-----------\n");
  return 0;
}